package bdsimple.impl.mysql;

import bdsimple.abstractfactory.AbstractFactoryDAO;
import bdsimple.dao.base.ItemDAO;
import bdsimple.dao.base.ItemVampiroDAO;
import bdsimple.dao.base.VampiroDAO;
import bdsimple.dto.base.ItemDTO;
import bdsimple.dto.base.ItemVampiroDTO;
import bdsimple.dto.base.VampiroDTO;
import dao.base.impl.BaseDTO;
import dao.base.impl.Reference;

public class ItemVampiroDTOImpl extends BaseDTO implements ItemVampiroDTO {

	public ItemVampiroDTOImpl() {
		super(ItemVampiroDAO.class);
	}

	// ---------------------------------------------------------------------------

	private int/* */nivelDesgaste;
	private int/* */nivelReparacion;
	private boolean equipado;
	private int/* */cantidad;

	private final Reference<VampiroDTO> vampiroDTORef = //
	new Reference<VampiroDTO>();

	private final Reference<ItemDTO> itemDTORef = //
	new Reference<ItemDTO>();

	// ---------------------------------------------------------------------------

	public int getNivelDesgaste() {
		return nivelDesgaste;
	}

	public void setNivelDesgaste(int nivelDesgaste) {
		this.nivelDesgaste = nivelDesgaste;
	}

	// ---------------------------------------------------------------------------

	public int getNivelReparacion() {
		return nivelReparacion;
	}

	public void setNivelReparacion(int nivelReparacion) {
		this.nivelReparacion = nivelReparacion;
	}

	// ---------------------------------------------------------------------------

	public boolean getEquipado() {
		return equipado;
	}

	public void setEquipado(boolean equipado) {
		this.equipado = equipado;
	}

	// ---------------------------------------------------------------------------

	public int getCantidad() {
		return cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	// ---------------------------------------------------------------------------

	@Override
	public Reference<VampiroDTO> getVampiroDTORef() {
		return vampiroDTORef;
	}

	public VampiroDTO getVampiroDTO() {
		if (vampiroDTORef.getRefValue() == null) {
			if (vampiroDTORef.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					VampiroDAO vampiroDAO = (VampiroDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(VampiroDAO.class, connectionBean);

					vampiroDTORef.setRefValue( //
							(VampiroDTO) vampiroDAO.loadById(vampiroDTORef
									.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return vampiroDTORef.getRefValue();
	}

	public void setVampiroDTORef(VampiroDTO vampiroDTORef) {
		this.vampiroDTORef.setRefValue(vampiroDTORef);
	}

	// ---------------------------------------------------------------------------

	@Override
	public Reference<ItemDTO> getItemDTORef() {
		return itemDTORef;
	}

	public ItemDTO getItemDTO() {
		if (itemDTORef.getRefValue() == null) {
			if (itemDTORef.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					ItemDAO itemDAO = (ItemDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(ItemDAO.class, connectionBean);

					itemDTORef.setRefValue( //
							(ItemDTO) itemDAO
									.loadById(itemDTORef.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return itemDTORef.getRefValue();
	}

	public void setItemDTORef(ItemDTO itemDTORef) {
		this.itemDTORef.setRefValue(itemDTORef);
	}

	// ---------------------------------------------------------------------------

}
